Libraries:
library(tidyverse)
library(readr)
library(rvest)
library(stats)
library(readxl)
library(dplyr)
library(stringr)
library(ggplot2)
library(ggthemes)
library(stringr)
library(data.table)
library(geojsonio)
library(leaflet)
library(rgdal)
library(haven)
Data:
# GDP up to Feb 2020
# https://ihsmarkit.com/products/us-monthly-gdp-index.html
gdp.index.data <- readxl::read_xlsx('US-Monthly-GDP-History-Data.xlsx', sheet = 3)
gdp.index <- gdp.index.data
colnames(gdp.index)[1] <- "Y_M"
year.month <- str_split_fixed(gdp.index$Y_M, ' - ', 2)
colnames(year.month) <- c('Year', 'Month')
gdp.index <- cbind(year.month, gdp.index[, -1])
gdp.annual <- gdp.index %>%
group_by(Year) %>%
summarize(MaxGDP = max(`Monthly Real GDP Index`),
MinGDP = min(`Monthly Real GDP Index`))
# https://nces.ed.gov/programs/digest/d18/tables/dt18_306.10.asp
enrollment.data <- read_xls('tabn306.10.xls')
enrollment <- enrollment.data[1:12]
# enrollment is in thousands
enrollment <- enrollment[-c(1, 3, 15, 27, 39, 51, 63, 75, 99, 111, 123, 135:139), ]
col1 <- data.frame(str_remove_all(enrollment[[1]], '\\.'), stringsAsFactors = FALSE)
col1[2, 1] <- "All_Students"
enrollment <- cbind(col1, enrollment[, -1])
enrollment <- t(enrollment)
rownames(enrollment) <- c()
colnames(enrollment) <- enrollment[1, ]
enrollment <- data.frame(enrollment)
colnames(enrollment)[1] <- 'Year'
enrollment <- enrollment[-1, ]
Years <- as.numeric(str_extract(enrollment$Year, "[:digit:]{4}"))
enrollment <- cbind(Years, enrollment[, -1])
enrollment <- data.frame(lapply(enrollment, function(x){
gsub("---", NA, x)
}))
str(enrollment)
enrollment1 <- enrollment[, 1:2]
gdp.annual1 <- gdp.annual
all.students <- as.numeric(enrollment[4:11, 2])
gdp.annual$Year <- as.factor(gdp.annual$Year)
enrollment1$Years <- as.factor(enrollment1$Years)
enrollment1$All_Students <- as.numeric(as.character(enrollment1$All_Students))
Model 3:
First making a graph of annual GDP highs and lows – maybe a temporary proxy for recessions?
Annual enrollment graph:
Join enrollment data and gdp data to create linear model test:
Graph it?
College Proximity Question 5/3: (Reading in Ivy’s data)
cz_college <- read_dta("cz_college.dta")
cz <- read_dta('cz.dta')
colleges <- read_dta('colleges.dta')
mobility.results <- read_xlsx('mobility_results.xlsx')
Read in/create mobility data: (Trends in Mobility: Commuting Zone Intergenerational Mobility Estimates by Birth Cohort) https://opportunityinsights.org/data/?geographic_level=101&topic=0&paper_id=0#resource-listing
grep('ncollege', colnames(cz.mobility))
[1] 2132
Read in geojson file:
Commuting zones on the map (cz.geojson@data) are in 1990s format. They need to be converted so our post-2000 data can be connected to the shapefiles: (https://www.ers.usda.gov/data-products/commuting-zones-and-labor-market-areas/)
Try to run some lms:
lm1 <- lm()
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.
LS0tDQp0aXRsZTogImVjb240MDEgZmluYWwgcHJvamVjdCBSIE5vdGVib29rIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KTGlicmFyaWVzOg0KYGBge3IgbGlicmFyaWVzLCByZXN1bHRzID0gIm1hcmt1cCJ9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHJ2ZXN0KQ0KbGlicmFyeShzdGF0cykNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KGRhdGEudGFibGUpDQpsaWJyYXJ5KGdlb2pzb25pbykNCmxpYnJhcnkobGVhZmxldCkNCmxpYnJhcnkocmdkYWwpDQpsaWJyYXJ5KGhhdmVuKQ0KYGBgDQoNCkRhdGE6DQpgYGB7ciBkYXRhLCByZXN1bHRzID0gIm1hcmt1cCJ9DQojIEdEUCB1cCB0byBGZWIgMjAyMA0KIyBodHRwczovL2loc21hcmtpdC5jb20vcHJvZHVjdHMvdXMtbW9udGhseS1nZHAtaW5kZXguaHRtbA0KZ2RwLmluZGV4LmRhdGEgPC0gcmVhZHhsOjpyZWFkX3hsc3goJ1VTLU1vbnRobHktR0RQLUhpc3RvcnktRGF0YS54bHN4Jywgc2hlZXQgPSAzKQ0KZ2RwLmluZGV4IDwtIGdkcC5pbmRleC5kYXRhDQpjb2xuYW1lcyhnZHAuaW5kZXgpWzFdIDwtICJZX00iDQp5ZWFyLm1vbnRoIDwtIHN0cl9zcGxpdF9maXhlZChnZHAuaW5kZXgkWV9NLCAnIC0gJywgMikNCmNvbG5hbWVzKHllYXIubW9udGgpIDwtIGMoJ1llYXInLCAnTW9udGgnKQ0KZ2RwLmluZGV4IDwtIGNiaW5kKHllYXIubW9udGgsIGdkcC5pbmRleFssIC0xXSkNCmdkcC5hbm51YWwgPC0gZ2RwLmluZGV4ICU+JQ0KICBncm91cF9ieShZZWFyKSAlPiUNCiAgc3VtbWFyaXplKE1heEdEUCA9IG1heChgTW9udGhseSBSZWFsIEdEUCBJbmRleGApLA0KICAgICAgICAgICAgTWluR0RQID0gbWluKGBNb250aGx5IFJlYWwgR0RQIEluZGV4YCkpDQoNCiMgaHR0cHM6Ly9uY2VzLmVkLmdvdi9wcm9ncmFtcy9kaWdlc3QvZDE4L3RhYmxlcy9kdDE4XzMwNi4xMC5hc3ANCmVucm9sbG1lbnQuZGF0YSA8LSByZWFkX3hscygndGFibjMwNi4xMC54bHMnKQ0KZW5yb2xsbWVudCA8LSBlbnJvbGxtZW50LmRhdGFbMToxMl0NCiMgZW5yb2xsbWVudCBpcyBpbiB0aG91c2FuZHMNCmVucm9sbG1lbnQgPC0gZW5yb2xsbWVudFstYygxLCAzLCAxNSwgMjcsIDM5LCA1MSwgNjMsIDc1LCA5OSwgMTExLCAxMjMsIDEzNToxMzkpLCBdDQpjb2wxIDwtIGRhdGEuZnJhbWUoc3RyX3JlbW92ZV9hbGwoZW5yb2xsbWVudFtbMV1dLCAnXFwuJyksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCmNvbDFbMiwgMV0gPC0gIkFsbF9TdHVkZW50cyINCmVucm9sbG1lbnQgPC0gY2JpbmQoY29sMSwgZW5yb2xsbWVudFssIC0xXSkNCmVucm9sbG1lbnQgPC0gdChlbnJvbGxtZW50KQ0Kcm93bmFtZXMoZW5yb2xsbWVudCkgPC0gYygpDQpjb2xuYW1lcyhlbnJvbGxtZW50KSA8LSBlbnJvbGxtZW50WzEsIF0NCmVucm9sbG1lbnQgPC0gZGF0YS5mcmFtZShlbnJvbGxtZW50KQ0KY29sbmFtZXMoZW5yb2xsbWVudClbMV0gPC0gJ1llYXInDQplbnJvbGxtZW50IDwtIGVucm9sbG1lbnRbLTEsIF0NClllYXJzIDwtIGFzLm51bWVyaWMoc3RyX2V4dHJhY3QoZW5yb2xsbWVudCRZZWFyLCAiWzpkaWdpdDpdezR9IikpDQplbnJvbGxtZW50IDwtIGNiaW5kKFllYXJzLCBlbnJvbGxtZW50WywgLTFdKQ0KZW5yb2xsbWVudCA8LSBkYXRhLmZyYW1lKGxhcHBseShlbnJvbGxtZW50LCBmdW5jdGlvbih4KXsgDQogIGdzdWIoIi0tLSIsIE5BLCB4KQ0KfSkpDQpzdHIoZW5yb2xsbWVudCkNCg0KZW5yb2xsbWVudDEgPC0gZW5yb2xsbWVudFssIDE6Ml0NCmdkcC5hbm51YWwxIDwtIGdkcC5hbm51YWwNCmFsbC5zdHVkZW50cyA8LSBhcy5udW1lcmljKGVucm9sbG1lbnRbNDoxMSwgMl0pDQoNCmdkcC5hbm51YWwkWWVhciA8LSBhcy5mYWN0b3IoZ2RwLmFubnVhbCRZZWFyKQ0KZW5yb2xsbWVudDEkWWVhcnMgPC0gYXMuZmFjdG9yKGVucm9sbG1lbnQxJFllYXJzKQ0KZW5yb2xsbWVudDEkQWxsX1N0dWRlbnRzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGVucm9sbG1lbnQxJEFsbF9TdHVkZW50cykpDQpgYGANCg0KTW9kZWwgMzoNCg0KICBGaXJzdCBtYWtpbmcgYSBncmFwaCBvZiBhbm51YWwgR0RQIGhpZ2hzIGFuZCBsb3dzIC0tIG1heWJlIGEgdGVtcG9yYXJ5IHByb3h5IGZvciByZWNlc3Npb25zPw0KYGBge3IgZ3JhcGgxLCBpbmNsdWRlID0gRkFMU0V9DQpnZHAuYW5udWFsICU+JQ0KICBnZ3Bsb3QoKSArDQogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBZZWFyLA0KICAgICAgICAgICAgICAgICB5ID0gTWF4R0RQLA0KICAgICAgICAgICAgICAgICBncm91cCA9IDEpKSArDQogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBZZWFyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTWluR0RQLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IDEpKSArDQogIHRoZW1lX2Vjb25vbWlzdCgpICsNCiAgeWxhYignUmVhbCBHRFAnKQ0KYGBgDQoNCiAgQW5udWFsIGVucm9sbG1lbnQgZ3JhcGg6DQpgYGB7ciBncmFwaDIsIGluY2x1ZGUgPSBGQUxTRX0NCmVucm9sbG1lbnQxICU+JQ0KICBnZ3Bsb3QoKSArDQogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBZZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEFsbF9TdHVkZW50cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAxKSkgKw0KICB0aGVtZV9lY29ub21pc3QoKSArDQogIHlsYWIoJ0Vucm9sbG1lbnQnKQ0KYGBgDQoNCiAgSm9pbiBlbnJvbGxtZW50IGRhdGEgYW5kIGdkcCBkYXRhIHRvIGNyZWF0ZSBsaW5lYXIgbW9kZWwgdGVzdDoNCmBgYHtyIGxtMSwgaW5jbHVkZSA9IEZBTFNFfQ0KdGVzdCA8LSBpbm5lcl9qb2luKGVucm9sbG1lbnQxLCBnZHAuYW5udWFsMSwNCiAgICAgICAgICBieSA9IGMoIlllYXJzIiA9ICJZZWFyIikpDQoNCmxtMSA8LSBsbShBbGxfU3R1ZGVudHMgfiBNYXhHRFAsDQogICAgICAgICAgZGF0YSA9IHRlc3QsDQogICAgICAgICAgbmEuYWN0aW9uID0gbmEub21pdCkNCnN1bW1hcnkobG0xKQ0KYGBgDQoNCiAgR3JhcGggaXQ/DQpgYGB7ciBncmFwaDNfNCwgaW5jbHVkZSA9IEZBTFNFfQ0KdGVzdCAlPiUNCiAgZ2dwbG90KCkgKw0KICBnZW9tX2xpbmUoYWVzKHggPSBZZWFycywNCiAgICAgICAgICAgICAgICAgeSA9IEFsbF9TdHVkZW50cywNCiAgICAgICAgICAgICAgICBncm91cCA9IDEpKSArDQogIHRoZW1lX2Vjb25vbWlzdCgpICsNCiAgeWxhYignRW5yb2xsbWVudCBieSBBbGwgU3R1ZGVudHMnKQ0KDQp0ZXN0ICU+JQ0KICBnZ3Bsb3QoKSArDQogIGdlb21fbGluZShhZXMoeCA9IFllYXJzLA0KICAgICAgICAgICAgICAgICB5ID0gTWF4R0RQLA0KICAgICAgICAgICAgICAgICBncm91cCA9IDEpKSArDQogICMgZ2VvbV9hYmxpbmUoc2xvcGUgPSAwLjgwMTUsIGludGVyY2VwdCA9IDYzMTYuNzIwNykgKw0KICB0aGVtZV9lY29ub21pc3QoKQ0KYGBgDQoNCkNvbGxlZ2UgUHJveGltaXR5IFF1ZXN0aW9uIDUvMzoNCihSZWFkaW5nIGluIEl2eSdzIGRhdGEpDQpgYGB7ciByZWFkIHByb3hpbWl0eSBkYXRhLCByZXN1bHRzID0gIm1hcmt1cCJ9DQpjel9jb2xsZWdlIDwtIHJlYWRfZHRhKCJjel9jb2xsZWdlLmR0YSIpDQpjeiA8LSByZWFkX2R0YSgnY3ouZHRhJykNCmNvbGxlZ2VzIDwtIHJlYWRfZHRhKCdjb2xsZWdlcy5kdGEnKQ0KbW9iaWxpdHkucmVzdWx0cyA8LSByZWFkX3hsc3goJ21vYmlsaXR5X3Jlc3VsdHMueGxzeCcpDQpgYGANCg0KUmVhZCBpbi9jcmVhdGUgbW9iaWxpdHkgZGF0YToNCihUcmVuZHMgaW4gTW9iaWxpdHk6IENvbW11dGluZyBab25lIEludGVyZ2VuZXJhdGlvbmFsIE1vYmlsaXR5IEVzdGltYXRlcyBieSBCaXJ0aCBDb2hvcnQpDQpodHRwczovL29wcG9ydHVuaXR5aW5zaWdodHMub3JnL2RhdGEvP2dlb2dyYXBoaWNfbGV2ZWw9MTAxJnRvcGljPTAmcGFwZXJfaWQ9MCNyZXNvdXJjZS1saXN0aW5nDQpgYGB7ciBtb2JpbGl0eSBkYXRhfQ0KbW9iaWxpdHkuZGF0YSA8LSByZWFkX3hscygnb25saW5lZGF0YTFfdHJlbmRzLnhscycpDQpjb2xuYW1lcyhtb2JpbGl0eS5kYXRhKSA8LSBtb2JpbGl0eS5kYXRhWzE1LCBdDQptb2JpbGl0eSA8LSBtb2JpbGl0eS5kYXRhWy1jKDE6MTYpLCBdDQptb2JpbGl0eS4xOTg2IDwtIG1vYmlsaXR5ICU+JQ0KICBmaWx0ZXIoYEJpcnRoIENvaG9ydGAgPT0gMTk4NikNCm1vYmlsaXR5LjE5ODYkYENvbW11dGluZyBab25lYCA8LSBhcy5udW1lcmljKG1vYmlsaXR5LjE5ODYkYENvbW11dGluZyBab25lYCkNCmN6Lm1vYmlsaXR5LmRhdGEgPC0gZnVsbF9qb2luKG1vYmlsaXR5LjE5ODZbLCBjKDEsIDM6OCldLA0KICAgICAgICAgICAgICAgICAgY3osDQogICAgICAgICAgICAgICAgICBieSA9IGMoYENvbW11dGluZyBab25lYCA9ICdjeicpKQ0KY3oubW9iaWxpdHkgPC0gY3oubW9iaWxpdHkuZGF0YVssIGMoMTo4LCAyMTMyOjIxMzcpXQ0KY3oubW9iaWxpdHkgPC0gY3oubW9iaWxpdHlbLCBjKDEsIDgsIDk6MTQsIDM6NywgMildDQojIHdyaXRlX2Nzdihjei5tb2JpbGl0eSwgJ2N6Lm1vYmlsaXR5LmNzdicpDQpgYGANCg0KUmVhZCBpbiBnZW9qc29uIGZpbGU6DQpgYGB7ciBnZW9qc29ufQ0KIyBjei5nZW9qc29uIDwtIGdlb2pzb25fcmVhZCgiY3oxOTkwLmpzb24iLA0KIyAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgPSAic3AiKQ0KIyBWaWV3KGN6Lmdlb2pzb25AZGF0YSkNCmN6Lmdlb2pzb24gJT4lDQogIGxlYWZsZXQoKSAlPiUNCiAgI2FkZFRpbGVzKCkgJT4lDQogIGFkZFBvbHlnb25zKCkgJT4lDQogIHNldFZpZXcoLTk2LCAzNy44LCAzKQ0KYGBgDQoNCkNvbW11dGluZyB6b25lcyBvbiB0aGUgbWFwIChjei5nZW9qc29uQGRhdGEpIGFyZSBpbiAxOTkwcyBmb3JtYXQuIFRoZXkgbmVlZCB0byBiZSBjb252ZXJ0ZWQgc28gb3VyIHBvc3QtMjAwMCBkYXRhIGNhbiBiZSBjb25uZWN0ZWQgdG8gdGhlIHNoYXBlZmlsZXM6DQooaHR0cHM6Ly93d3cuZXJzLnVzZGEuZ292L2RhdGEtcHJvZHVjdHMvY29tbXV0aW5nLXpvbmVzLWFuZC1sYWJvci1tYXJrZXQtYXJlYXMvKQ0KYGBge3IgY3ogc2hhcGUgY29tYmluZSwgaW5jbHVkZT1GQUxTRX0NCmN6LmNvbnZlcnNpb25zIDwtIHJlYWRfeGxzKCdjejAwX2Vxdl92MS54bHMnKQ0KY3ouY29udmVyc2lvbnMgPC0gY3ouY29udmVyc2lvbnNbLCBjKDI6NCldDQpjei5jb252ZXJzaW9ucyRgQ29tbXV0aW5nIFpvbmUgSUQsIDE5OTBgIDwtIGFzLm51bWVyaWMoY3ouY29udmVyc2lvbnMkYENvbW11dGluZyBab25lIElELCAxOTkwYCkNCmN6LmNvbnZlcnNpb25zJGBDb21tdXRpbmcgWm9uZSBJRCwgMTk4MGAgPC0gYXMubnVtZXJpYyhjei5jb252ZXJzaW9ucyRgQ29tbXV0aW5nIFpvbmUgSUQsIDE5ODBgKQ0KY29sbmFtZXMoY3ouY29udmVyc2lvbnMpWzJdIDwtICdjejE5OTAnDQpjb2xuYW1lcyhjei5jb252ZXJzaW9ucylbMV0gPC0gJ2N6MjAwMCcNCmNvbG5hbWVzKGN6LmNvbnZlcnNpb25zKVszXSA8LSAnY3oxOTgwJw0KDQpoZWFkKGN6Lmdlb2pzb25AZGF0YSkNCmN6LmdlbyA8LSBjei5nZW9qc29uDQpjb2xuYW1lcyhjei5tb2JpbGl0eSlbMV0gPC0gJ2N6MjAwMCcNCg0KY3ouZ2VvQGRhdGEgPC0gbGVmdF9qb2luKGN6Lmdlb0BkYXRhLA0KICAgICAgICAgICAgICAgICAgY3ouY29udmVyc2lvbnNbLCAtM10sDQogICAgICAgICAgICAgICAgICBieSA9IGMoJ2N6JyA9ICdjejE5OTAnKSkNCmN6Lmdlb0BkYXRhIDwtIGxlZnRfam9pbihjei5nZW9AZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBjei5tb2JpbGl0eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICdjejIwMDAnKQ0KIyB3cml0ZU9HUihjei5nZW8sICdjei5nZW8nLCBsYXllciA9ICdjei5nZW8nLCBkcml2ZXIgPSAnR2VvSlNPTicpDQoNCmBgYA0KDQpUcnkgdG8gcnVuIHNvbWUgbG1zOg0KDQpgYGB7cn0NCmxtMSA8LSBsbSgpDQoNCmBgYA0KDQoNCg0KQWRkIGEgbmV3IGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqSW5zZXJ0IENodW5rKiBidXR0b24gb24gdGhlIHRvb2xiYXIgb3IgYnkgcHJlc3NpbmcgKkN0cmwrQWx0K0kqLg0KDQpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4NCg0KVGhlIHByZXZpZXcgc2hvd3MgeW91IGEgcmVuZGVyZWQgSFRNTCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBDb25zZXF1ZW50bHksIHVubGlrZSAqS25pdCosICpQcmV2aWV3KiBkb2VzIG5vdCBydW4gYW55IFIgY29kZSBjaHVua3MuIEluc3RlYWQsIHRoZSBvdXRwdXQgb2YgdGhlIGNodW5rIHdoZW4gaXQgd2FzIGxhc3QgcnVuIGluIHRoZSBlZGl0b3IgaXMgZGlzcGxheWVkLg0K